package modulo1.cci;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import modulo1.cdp.Aluno;
import modulo1.cdp.EnumTipoPessoa;
import modulo1.cgt.CadastroInternoApl;

@WebServlet(name = "AlunoCtrl", urlPatterns = {"/Aluno"})
public class AlunoCtrl extends HttpServlet {
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        RequestDispatcher cih = request.getRequestDispatcher("modulo1/cadint/aluno_cadastro.jsp");
        cih.forward(request, response);
    }
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        String evento = request.getParameter("evento");
        if(evento != null) {            
            if(evento.equals("alterar") || evento.equals("consultar")) {
                long id = Long.parseLong(request.getParameter("id"));
                try {
                    Aluno aluno = CadastroInternoApl.getInstance().alunoConsultar(id);
                    request.setAttribute("aluno", aluno);
                }
                catch (Exception ex) {
                    //TODO Exceção alterar aluno
                }
            }
            else if(evento.equals("excluir")) {
                long id = Long.parseLong(request.getParameter("id"));
                try {
                    CadastroInternoApl.getInstance().alunoExcluir(id);
                    
                    String redirect = "Aluno";
                    String mensagem = "Aluno excluido com sucesso.";
                    response.sendRedirect("resultado.jsp?redirect="+redirect+"&mensagem="+mensagem);
                    return;
                }
                catch (Exception ex) {
                    //TODO Exceção excluir aluno
                    ex.printStackTrace();
                    String redirect = "Aluno";
                    String mensagem = ex.getMessage();
                    response.sendRedirect("resultado.jsp?redirect="+redirect+"&mensagem="+mensagem);
                    return;
                } 
            }
            
            RequestDispatcher cih = request.getRequestDispatcher("modulo1/cadint/aluno_form.jsp");
            cih.forward(request, response);
            return;
        }
        
        String buscar = request.getParameter("buscar");
        try {
            List<Aluno> alunos;
            if(buscar != null) {
                alunos = CadastroInternoApl.getInstance().alunoBuscarNome(buscar);
            }
            else {
                alunos = CadastroInternoApl.getInstance().alunoBuscar();
            }
            request.setAttribute("alunos", alunos);
        }
        catch(Exception ex) {
            // TODO Exceção buscar aluno
        }
        
        processRequest(request, response);
    }
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        String evento = request.getParameter("evento");
        if(evento != null) {
            if(evento.equals("inserir") || evento.equals("alterar")) {
                try {
                    Aluno c;
                    if(request.getParameter("id") != null) {
                        c = CadastroInternoApl.getInstance().alunoConsultar(Long.parseLong(request.getParameter("id")));                        
                    }
                    else {
                        c = new Aluno();
                        c.setMatricula(Long.toString(new Date().getTime()));
                        c.setTipoPessoa(EnumTipoPessoa.Aluno);
                    }
                        
                    c.setNome(request.getParameter("nome"));
                    c.setEmail(request.getParameter("email"));
                    c.setEndereco(request.getParameter("endereco"));
                    c.setTelefone(request.getParameter("telefone"));
                    c.setSexo(request.getParameter("sexo").charAt(0));
                    c.setNaturalidade(request.getParameter("naturalidade"));
                    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
                    c.setDataNascimento(sdf.parse(request.getParameter("dataNascimento")));
                    c.setRG(request.getParameter("rg"));
                    c.setLogin(request.getParameter("login"));
                    c.setSenha(request.getParameter("senha"));
                    CadastroInternoApl.getInstance().alunoSalvar(c);
                    
                    String redirect = "Aluno";
                    String mensagem = "Aluno salvo com sucesso.";
                    response.sendRedirect("resultado.jsp?redirect="+redirect+"&mensagem="+mensagem);
                } catch (Exception ex) {
                    ex.printStackTrace();
                    String redirect = "Aluno";
                    //String mensagem = ex.getMessage();
                    String mensagem = "Erro ao salvar aluno.";
                    response.sendRedirect("resultado.jsp?redirect="+redirect+"&mensagem="+mensagem);
                }
                return;
            }
        }
        
        processRequest(request, response);
    }
}
